﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using l1cs.server.model.Instance;
using l1cs.server.serverpackets;

namespace l1cs.server.model.poison
{
    public abstract class L1Poison
    {
        protected static bool isValidTarget( L1Character cha )
        {
            if ( cha == null )
            {
                return false;
            }
            // 毒は重複しない
            if ( cha.getPoison() != null )
            {
                return false;
            }

            if ( !( cha is L1PcInstance ) )
            {
                return true;
            }

            L1PcInstance player = (L1PcInstance)cha;
            // ゼニス リング装備中、バフォ メットアーマー装備中 、ベノム レジスト中
            if ( player.getInventory().checkEquipped( 20298 )
                    || player.getInventory().checkEquipped( 20117 )
                    || player.hasSkillEffect( 104 ) )
            {
                return false;
            }
            return true;
        }

        // 微妙・・・素直にsendPacketsをL1Characterへ引き上げるべきかもしれない
        protected static void sendMessageIfPlayer( L1Character cha, int msgId )
        {
            if ( !( cha is L1PcInstance ) )
            {
                return;
            }

            L1PcInstance player = (L1PcInstance)cha;
            player.sendPackets( new S_ServerMessage( msgId ) );
        }

        /// <summary>
        /// この毒のエフェクトIDを返す。
        /// S_Poison#S_Poison(int, int)
        /// </summary>
        /// <returns>S_Poisonで使用されるエフェクトID</returns>
        public abstract int getEffectId();

        /// <summary>
        /// この毒の効果を取り除く。
        /// L1Character#curePoison()
        /// </summary>
        public abstract void cure();
    }
}
